package cn.edu.nju.software.android.util;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;

public class ImageUtil {

	public static Drawable resizeStatusPic(Drawable image) {
		Bitmap d = ((BitmapDrawable) image).getBitmap();
		int height = d.getWidth();
		int resizedHeight = 500;
		int width = (int) ((resizedHeight * d.getHeight() + 0.0)/height);
		return resizePic(image, resizedHeight, width);
	}

	public static Drawable resizeProfilePic(Drawable image) {
		return resizePic(image, 100, 100);
	}

	public static Drawable resizePic(Drawable image, int height, int width) {
		Bitmap d = ((BitmapDrawable) image).getBitmap();
		Bitmap bitmapOrig = null;
		try{
			bitmapOrig = Bitmap.createScaledBitmap(d, height, width, false);
		}catch (Exception e) {
			e.printStackTrace();
		}
		return new BitmapDrawable(null, bitmapOrig);
	}


	public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
		// Raw height and width of image
		final int height = options.outHeight;
		final int width = options.outWidth;
		int inSampleSize = 1;

		if (height > reqHeight || width > reqWidth) {

			// Calculate ratios of height and width to requested height and width
			final int heightRatio = Math.round((float) height / (float) reqHeight);
			final int widthRatio = Math.round((float) width / (float) reqWidth);

			// Choose the smallest ratio as inSampleSize value, this will guarantee
			// a final image with both dimensions larger than or equal to the
			// requested height and width.
			inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
		}

		return inSampleSize;
	}
	
	public static Bitmap decodeSampledBitmapFromFile(String pathName,
	        int reqWidth, int reqHeight) {

	    // First decode with inJustDecodeBounds=true to check dimensions
	    final BitmapFactory.Options options = new BitmapFactory.Options();
	    options.inJustDecodeBounds = true;
	    BitmapFactory.decodeFile(pathName, options);

	    // Calculate inSampleSize
	    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

	    // Decode bitmap with inSampleSize set
	    options.inJustDecodeBounds = false;
	    Bitmap bitmap = null;
	    try{
	    	bitmap = BitmapFactory.decodeFile(pathName, options);
	    }catch (Exception e) {
			return null;
		}
	    return bitmap;
	}
}
